# NOTE: This workflow was ported from Travis.
# Travis was using Ubuntu 14.04. Ubuntu 14.04 is not supportted by GitHub workflows. Ubuntu 20.04 is recommended.
# Travis was using Clang 3.6. The earliest version support by Ubuntu 20.04 is Clang 6.0.
# Travis was caching the clang package. APT package caching is not natively supported by GitHub actions/cache.
# Travis was using Mac OS X 10.13.6 / Xcode 9.4.1 / LLVM 9.1.0
#
name: Continuous Integration

on:
    workflow_dispatch:
    pull_request:
        branches:
            - main

permissions: read-all

jobs:
    linux:
        runs-on: ${{matrix.os}}
        strategy:
            fail-fast: false
            matrix:
                os: [ubuntu-20.04]
                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
                cmake_build_type: [Debug, Release]
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                  python-version: '3.7'
            - name: Install Ubuntu Package Dependencies
              run: |
                  sudo apt-get -qq update
                  sudo apt-get install -y clang-6.0
            - name: Install GoogleTest
              run: |
                  # check out pre-breakage version of googletest; can be deleted when
                  # issue 3128 is fixed
                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
                  mkdir -p External/googletest
                  cd External/googletest
                  git init
                  git remote add origin https://github.com/google/googletest.git
                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
                  git reset --hard FETCH_HEAD
                  cd ../..
            - name: Update Glslang Sources
              run: |
                  ./update_glslang_sources.py
            - name: Build
              env:
                  CC: ${{matrix.compiler.cc}}
                  CXX: ${{matrix.compiler.cxx}}
              run: |
                  mkdir build && cd build
                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
                  make -j4 install
            - name: Test
              run: |
                  cd build
                  ctest --output-on-failure &&
                  cd ../Test && ./runtests

    macos:
        runs-on: ${{matrix.os}}
        strategy:
            fail-fast: false
            matrix:
                os: [macos-11]
                compiler: [{cc: clang, cxx: clang++}]
                cmake_build_type: [Debug, Release]
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                  python-version: '3.7'
            - name: Install GoogleTest
              run: |
                  # check out pre-breakage version of googletest; can be deleted when
                  # issue 3128 is fixed
                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
                  mkdir -p External/googletest
                  cd External/googletest
                  git init
                  git remote add origin https://github.com/google/googletest.git
                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
                  git reset --hard FETCH_HEAD
                  cd ../..
            - name: Update Glslang Sources
              run: |
                  ./update_glslang_sources.py
            - name: Build
              env:
                  CC: ${{matrix.compiler.cc}}
                  CXX: ${{matrix.compiler.cxx}}
              run: |
                  mkdir build && cd build
                  cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install ..
                  make -j4 install
            - name: Test
              run: |
                  cd build
                  ctest --output-on-failure &&
                  cd ../Test && ./runtests

    android:
        runs-on: ${{matrix.os}}
        strategy:
            fail-fast: false
            matrix:
                os: [ubuntu-20.04]
                compiler: [{cc: clang, cxx: clang++}]
                cmake_build_type: [Release]
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-python@v2
              with:
                  python-version: '3.7'
            - name: Install Ubuntu Package Dependencies
              if: ${{matrix.os == 'ubuntu-20.04'}}
              run: |
                  sudo apt-get -qq update
                  sudo apt-get install -y clang-6.0
            - name: Install Android NDK
              run: |
                  export ANDROID_NDK=$HOME/android-ndk
                  git init $ANDROID_NDK
                  pushd $ANDROID_NDK
                  git remote add dneto0 https://github.com/dneto0/android-ndk.git
                  git fetch --depth=1 dneto0 r17b-strip
                  git checkout FETCH_HEAD
                  popd
            - name: Install GoogleTest
              run: |
                  # check out pre-breakage version of googletest; can be deleted when
                  # issue 3128 is fixed
                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
                  mkdir -p External/googletest
                  cd External/googletest
                  git init
                  git remote add origin https://github.com/google/googletest.git
                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
                  git reset --hard FETCH_HEAD
                  cd ../..
            - name: Update Glslang Sources
              run: |
                  ./update_glslang_sources.py
            - name: Build
              env:
                  CC: ${{matrix.compiler.cc}}
                  CXX: ${{matrix.compiler.cxx}}
              run: |
                  export ANDROID_NDK=$HOME/android-ndk
                  export TOOLCHAIN_PATH=$ANDROID_NDK/build/cmake/android.toolchain.cmake
                  echo $ANDROID_NDK
                  echo $TOOLCHAIN_PATH
                  mkdir build && cd build
                  cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH} -DANDROID_NATIVE_API_LEVEL=android-14 -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DANDROID_ABI="armeabi-v7a with NEON" -DBUILD_TESTING=OFF ..
                  make -j4
